home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
009a
/
dtest12.zip
/
DTESTFOX.ASM
< prev
next >
Wrap
Assembly Source File
|
1991-06-11
|
7KB
|
158 lines
PAGE 60,132
TITLE DTESTFOX 1.2 - A DISKETTE TEST MODULE FOR A FOXPRO PROGRAM.
;
; Written by: Richard L. Fink
; RainTree Computer Systems
; P.O.Box 2339
; Mill Valley, CA 94941
;
; Date: June 11, 1991
; Compiler: MASM 6.0
;
; License: DTESTFOX.BIN and it's assembler source file are hereby
; placed in the Public Domain.
;
;
; DTESTFOX.BIN module which is run as a Foxpro function. It tests a diskette
; drive to see whether or not it contains a diskette. If a diskette is
; detected, DTESTFOX will determine which of the following states it is in:
; unformatted, formatted with no files, formatted with files. A single
; character is returned for each condition.
;
; This is invaluable for preventing the dreaded:
; ABORT, RETRY, IGNORE?
; in the middle of your beautiful Foxpro application screen.
;
; DTESTFOX.BIN is run by calling it as a Foxpro function, using the "With"
; option. The "With" value defines a one character field which contains
; the letter of the diskette drive you wish to check. Note that no
; validation is performed on the drive character. An invalid drive will
; return that the drive contains an unformatted diskette.
;
;
; Summary:
; --------
;
; Call Values:
; This module expects a 1 character field passed to it. That field
; will contain the drive character in either upper or lower case. On
; entry to this module the field is pointed to by the registers DS:BX.
;
; Return Values:
; This module will return a 1 character value to the calling program.
; It will place that value in the source field, replacing the drive
; character.
;
; The return value will be-
; 0 - Drive contains a formatted diskette which is EMPTY.
; 1 - Drive contains a formatted diskette with files or directories.
; 2 - Drive contains an UNFORMATTED diskette.
; 3 - Drive does NOT contain a diskette.
; 4 - Drive is an unknown unit.
;
; -------------------------------------------------------------------------
; The idea for DTESTFOX came from a DOS Tip by Dan Gookin in the April 1991
; issue of PC Computing Magazine.
;
PAGE
;
DTEST_SEG SEGMENT BYTE PUBLIC
ASSUME CS:DTEST_SEG,DS:DTEST_SEG
;
;
DTEST PROC FAR
PUSH AX ;ALL REGISTERS MUST BE PRESERVED
PUSH CX ; DUE TO THE NON-STANDARD NATURE
PUSH DX ; OF INT-25.
PUSH SI
PUSH DI
PUSH BP
PUSH ES
PUSH DS ;SAVE PARM SEG.
PUSH BX ;SAVE PARM PTR.
;
MOV AL,[BX] ;GET PARM FROM FOX FIELD.
PUSH CS ;EQUALIZE DS TO CS.
POP DS ;EQUALIZE DS TO CS.
;
AND AL,NOT 20H ;CONVERT TO UPPER CASE.
JZ @F ;NO PARM, USE DEFAULT.
MOV DRIVENO,AL ;SAVE IT.
@@:
; ;ABSOLUTE DISK READ.
MOV DX,0 ;LOGICAL SECTOR NO.
MOV CX,1 ;NUMBER OF SECTORS TO READ.
MOV BX,OFFSET DTA ;PTR TO DTA.
MOV AL,DRIVENO ;GET DRIVE CAHARACTER.
SUB AL,41H ;CONVERT ASCII DRIVE CHAR TO A DRIVE NUMBER.
INT 25H ;ABSOLUTE DISK READ.
POP DX ;DISCARD FLAGS LEFT ON THE STACK BY INT-25.
JC BAD_READ ;DRIVE DOES NOT CONTAIN A FORMATTED DISKETTE.
;
; ;DISKETTE IS FORMATTED- CHECK FOR FILES.
PUSH DS ;SAVE DATA SEG.
MOV AH,2FH ;GET DTA, ES:BX RETURNED.
INT 21H ;DOS FUNCTION CALL.
PUSH BX ;SAVE OFFSET TO FOX DTA.
PUSH ES ;SAVE BASE TO FOX DTA.
;
MOV DX,OFFSET DTA ;PT TO LOCAL DTA.
MOV AH,1AH ;SET DTA, TO DS:DX.
INT 21H ;DOS FUNCTION CALL.
;
MOV DX,OFFSET DRIVENO ;PT TO DRIVE,PATH,FILENAME STRING.
MOV CX,017H ;ATTRIBUTE.
MOV AH,4EH ;FIND 1ST FILENAME MATCH, @DS:DX.
INT 21H ;DOS FUNCTION CALL.
;
PAGE
;
POP DS ;GET BASE TO FOX DTA.
POP DX ;GET OFFSET TO FOX DTA.
PUSHF ;SAVE SYSTEM STATUS FROM FILE FIND.
MOV AH,1AH ;SET DTA, TO DS:DX.
INT 21H ;DOS FUNCTION CALL.
POPF ;RESTORE SYSTEM STATUS FROM FILE FIND.
POP DS ;RESTORE DATA SEG.
;
MOV DL,'0' ;SETUP BASE RETURN CODE.
JC RTNCD_0 ;DISKETTE HAS NO FILES.
JMP RTNCD_1 ;DISKETTE HAS FILES.
;
;
BAD_READ: ;DRIVE CONTAINS NO DISKETTE, OR UNFORMATTED DISKETTE.
MOV DL,'0' ;SETUP BASE RETURN CODE.
CMP AH,1FH ;READ ERROR- DRIVE FAILED TO RESPOND ?
JAE RTNCD_3 ;YES.
CMP AH,8 ;READ ERROR- BAD CRC ?
JE RTNCD_2 ;YES.
CMP AX,0201H ;READ ERROR- UNKNOWN UNIT ?
JE RTNCD_4 ;YES.
JMP RTNCD_2 ;OTHER READ ERROR.
;
;
RTNCD_4: INC DL ;RTN CODE 4 - Drive is an unknown unit.
RTNCD_3: INC DL ;RTN CODE 3 - Drive does NOT contain a diskette.
RTNCD_2: INC DL ;RTN CODE 2 - Drive contains an UNFORMATTED diskette.
RTNCD_1: INC DL ;RTN CODE 1 - Drive contains a formatted diskette with files.
RTNCD_0: ;RTN CODE 0 - Drive contains a formatted diskette with no files.
;
POP BX ;RESTORE PARM PTR.
POP DS ;RESTORE PARM SEG.
MOV [BX],DL ;SETUP RETURN CODE IN FOX FIELD.
POP ES
POP BP
POP DI
POP SI
POP DX
POP CX
POP AX
RET ;FAR RETURN.
DTEST ENDP
;
DRIVENO DB 41H,':\*.*',0 ;DRIVE, PATH, FILENAME, ASCIIZ STRING.
DTA DB 512 DUP(?) ;DTA- SIZE = 1 SECTOR.
;
DTEST_SEG ENDS
END DTEST